// ========================================
// API 使用示例集合
// ========================================

import {
  // 用户认证
  login,
  register,
  saveToken,
  clearAuth,
  
  // 智能问答
  generateAnswer,
  getModelConfig,
  MODEL_PRESETS,
  
  // 会话管理
  getSessions,
  getSessionDetail,
  getSessionMessages,
  deleteSession,
  
  // 知识库管理
  createKnowledgeBase,
  getKnowledgeBaseList,
  uploadDocument,
  
  // 历史记录
  getUserConversations,
  getLast7DaysRange,
  formatTimeDisplay,
  
  // 向量检索
  retrieveChunks,
  generateEmbedding
} from './index.js'

// ========================================
// 1. 用户认证示例
// ========================================

export const authExamples = {
  // 用户登录
  async loginExample() {
    try {
      const result = await login({
        Username: 'admin',
        Password: 'password123'
      })
      
      if (result.code === 200) {
        saveToken(result.data)
        console.log('登录成功，用户信息:', result.data.user)
        return result.data
      }
    } catch (error) {
      console.error('登录失败:', error)
      throw error
    }
  },
  
  // 用户注册
  async registerExample() {
    try {
      const result = await register({
        Username: 'newuser',
        Password: 'password123',
        Email: 'newuser@example.com',
        Phone: '13800138000'
      })
      
      if (result.code === 200) {
        console.log('注册成功:', result.data)
        return result.data
      }
    } catch (error) {
      console.error('注册失败:', error)
      throw error
    }
  },
  
  // 退出登录
  logoutExample() {
    clearAuth()
    console.log('已退出登录')
  }
}

// ========================================
// 2. 智能问答示例
// ========================================

export const qaExamples = {
  // 基础问答
  async basicQuestionExample(question) {
    try {
      const result = await generateAnswer({
        question,
        ...MODEL_PRESETS.CHAT
      })
      
      console.log('AI回答:', result.data.answer)
      return result.data
    } catch (error) {
      console.error('问答失败:', error)
      throw error
    }
  },
  
  // 推理问答
  async reasoningQuestionExample(question) {
    try {
      const result = await generateAnswer({
        question,
        ...MODEL_PRESETS.REASONING
      })
      
      console.log('推理回答:', result.data.answer)
      return result.data
    } catch (error) {
      console.error('推理问答失败:', error)
      throw error
    }
  },
  
  // 星火模型问答
  async xunfeiQuestionExample(question) {
    try {
      const result = await generateAnswer({
        question,
        ...MODEL_PRESETS.XUNFEI_CHAT
      })
      
      console.log('星火回答:', result.data.answer)
      return result.data
    } catch (error) {
      console.error('星火问答失败:', error)
      throw error
    }
  },
  
  // 多轮对话
  async multiTurnConversationExample() {
    try {
      // 第一轮对话
      const firstResult = await generateAnswer({
        question: '什么是RAG技术？',
        ...MODEL_PRESETS.CHAT
      })
      
      console.log('第一轮回答:', firstResult.data.answer)
      
      // 继续对话
      const secondResult = await generateAnswer({
        question: 'RAG相比传统检索有什么优势？',
        sessionId: firstResult.data.sessionId,
        ...MODEL_PRESETS.CHAT
      })
      
      console.log('第二轮回答:', secondResult.data.answer)
      
      return {
        first: firstResult.data,
        second: secondResult.data
      }
    } catch (error) {
      console.error('多轮对话失败:', error)
      throw error
    }
  }
}

// ========================================
// 3. 知识库管理示例
// ========================================

export const knowledgeBaseExamples = {
  // 创建知识库
  async createKnowledgeBaseExample() {
    try {
      const result = await createKnowledgeBase({
        knowledgeBaseName: '技术文档库',
        knowledgeBaseDescription: '存储RAG相关的技术文档和资料',
        isPublic: false
      })
      
      console.log('知识库创建成功:', result.data)
      return result.data.knowledgeBaseId
    } catch (error) {
      console.error('创建知识库失败:', error)
      throw error
    }
  },
  
  // 上传文档
  async uploadDocumentExample(knowledgeBaseId, filePath, documentTitle) {
    try {
      const result = await uploadDocument({
        filePath,
        documentTitle,
        knowledgeBaseId,
        documentAccessLevel: 'private'
      })
      
      console.log('文档上传成功:', result.data)
      return result.data
    } catch (error) {
      console.error('文档上传失败:', error)
      throw error
    }
  },
  
  // 基于知识库问答
  async knowledgeBaseQAExample(question, knowledgeBaseId) {
    try {
      const result = await generateAnswer({
        question,
        knowledgeBaseId,
        ...MODEL_PRESETS.CHAT
      })
      
      console.log('基于知识库的回答:', result.data.answer)
      return result.data
    } catch (error) {
      console.error('知识库问答失败:', error)
      throw error
    }
  },
  
  // 完整知识库工作流
  async completeKnowledgeBaseWorkflow() {
    try {
      // 1. 创建知识库
      const kbId = await this.createKnowledgeBaseExample()
      
      // 2. 上传文档（这里需要实际的文件路径）
      // const uploadResult = await this.uploadDocumentExample(
      //   kbId, 
      //   '/path/to/document.pdf', 
      //   'RAG技术文档'
      // )
      
      // 3. 基于知识库问答
      const qaResult = await this.knowledgeBaseQAExample(
        '什么是RAG技术？请基于上传的文档回答。',
        kbId
      )
      
      return {
        knowledgeBaseId: kbId,
        qaResult
      }
    } catch (error) {
      console.error('知识库工作流失败:', error)
      throw error
    }
  }
}

// ========================================
// 4. 会话管理示例
// ========================================

export const sessionExamples = {
  // 获取会话列表
  async getSessionsExample() {
    try {
      const result = await getSessions()
      console.log('会话列表:', result.data)
      return result.data
    } catch (error) {
      console.error('获取会话列表失败:', error)
      throw error
    }
  },
  
  // 获取会话详情
  async getSessionDetailExample(sessionId) {
    try {
      const result = await getSessionDetail(sessionId)
      console.log('会话详情:', result.data)
      return result.data
    } catch (error) {
      console.error('获取会话详情失败:', error)
      throw error
    }
  },
  
  // 获取会话消息历史
  async getSessionMessagesExample(sessionId) {
    try {
      const result = await getSessionMessages(sessionId)
      console.log('会话消息历史:', result.data)
      return result.data
    } catch (error) {
      console.error('获取会话消息失败:', error)
      throw error
    }
  },
  
  // 删除会话
  async deleteSessionExample(sessionId) {
    try {
      const result = await deleteSession(sessionId)
      console.log('会话删除成功')
      return result.data
    } catch (error) {
      console.error('删除会话失败:', error)
      throw error
    }
  }
}

// ========================================
// 5. 历史记录示例
// ========================================

export const historyExamples = {
  // 获取最近7天的对话记录
  async getRecentHistoryExample() {
    try {
      const dateRange = getLast7DaysRange()
      const result = await getUserConversations({
        ...dateRange,
        page: 1,
        pageSize: 20
      })
      
      console.log('最近7天的对话记录:', result.data)
      return result.data
    } catch (error) {
      console.error('获取历史记录失败:', error)
      throw error
    }
  },
  
  // 格式化时间显示
  formatTimeExample(timestamp) {
    const formattedTime = formatTimeDisplay(timestamp)
    console.log('格式化时间:', formattedTime)
    return formattedTime
  }
}

// ========================================
// 6. 向量检索示例
// ========================================

export const vectorExamples = {
  // 检索相关文档块
  async retrieveChunksExample(query) {
    try {
      const result = await retrieveChunks(query, 5)
      console.log('相关文档块:', result.data)
      return result.data
    } catch (error) {
      console.error('检索文档块失败:', error)
      throw error
    }
  },
  
  // 生成文本向量
  async generateEmbeddingExample(text) {
    try {
      const result = await generateEmbedding(text)
      console.log('文本向量:', result.data)
      return result.data
    } catch (error) {
      console.error('生成向量失败:', error)
      throw error
    }
  }
}

// ========================================
// 7. 综合示例
// ========================================

export const comprehensiveExamples = {
  // 完整的RAG问答流程
  async completeRAGWorkflow() {
    try {
      console.log('=== 开始完整RAG问答流程 ===')
      
      // 1. 用户登录
      const authResult = await authExamples.loginExample()
      console.log('1. 用户登录完成')
      
      // 2. 创建知识库
      const kbId = await knowledgeBaseExamples.createKnowledgeBaseExample()
      console.log('2. 知识库创建完成')
      
      // 3. 上传文档（模拟）
      console.log('3. 文档上传（需要实际文件）')
      
      // 4. 基于知识库问答
      const qaResult = await knowledgeBaseExamples.knowledgeBaseQAExample(
        '什么是RAG技术？请详细解释。',
        kbId
      )
      console.log('4. 知识库问答完成')
      
      // 5. 向量检索
      const chunks = await vectorExamples.retrieveChunksExample('RAG技术')
      console.log('5. 向量检索完成')
      
      // 6. 获取历史记录
      const history = await historyExamples.getRecentHistoryExample()
      console.log('6. 历史记录获取完成')
      
      console.log('=== RAG问答流程完成 ===')
      
      return {
        auth: authResult,
        knowledgeBaseId: kbId,
        qaResult,
        chunks,
        history
      }
    } catch (error) {
      console.error('完整流程失败:', error)
      throw error
    }
  }
}

// ========================================
// 导出所有示例
// ========================================

export default {
  auth: authExamples,
  qa: qaExamples,
  knowledgeBase: knowledgeBaseExamples,
  session: sessionExamples,
  history: historyExamples,
  vector: vectorExamples,
  comprehensive: comprehensiveExamples
} 